package com.bbs.model.services;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bbs.model.dao.UserinfoMapper;
import com.bbs.model.entity.Userinfo;
import com.bbs.model.entity.UserinfoExample;

/**
 * 用户管理service类
 * 
 * @author 乔娇
 * 
 */

@Service
public class UserManageService {

	@Autowired
	private UserinfoMapper um;

	/*-----------------------注册-----------------------*/
	/**
	 * 检查用户名是否可用
	 * 
	 * @param username
	 * @return
	 */
	public boolean checkUsername(String username) {
		// 1.检查用户名是否冲突域
		UserinfoExample example = new UserinfoExample();
		UserinfoExample.Criteria cc = example.createCriteria();
		// 添加名字条件
		cc.andUsernameEqualTo(username);
		List<Userinfo> list = um.selectByExample(example);

		return list.size() == 0;
	}

	/**
	 * 添加新用户
	 * 
	 * @param user
	 * @return true，注册成功，false，用户名冲突
	 */
	public boolean addNewUser(Userinfo user) {
		boolean isOK = checkUsername(user.getUsername());

		if (!isOK) {
			return false;
		}
		// 2.进行插入操作
		um.insertSelective(user);
		return true;
	}

	/*-----------------------登录-----------------------*/

	/**
	 * 检查用户状态是否被冻结
	 * 
	 * @return
	 */
	public boolean checkuserstatus(Userinfo user) {
		UserinfoExample example = new UserinfoExample();
		UserinfoExample.Criteria cc = example.createCriteria();
		// 添加用户名条件
		cc.andUsernameEqualTo(user.getUsername());
		List<Userinfo> list = um.selectByExample(example);
		if (list.size() > 0) {
			Userinfo result = list.get(0);
			if (result.getUserstatus().equals("true")) {
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}

	}

	/**
	 * 验证用户的登录信息是否正确，如果正确则返回该用户详细信息，更新登录时间
	 * 
	 * @return
	 */
	public Userinfo checkLogin(Userinfo user) {
		UserinfoExample example = new UserinfoExample();
		UserinfoExample.Criteria cc = example.createCriteria();
		// 添加用户名条件
		cc.andUsernameEqualTo(user.getUsername());
		// 添加密码条件
		cc.andPasswordEqualTo(user.getPassword());
		// 查询，但这个方法返回值是List
		List<Userinfo> list = um.selectByExample(example);
		// 判断登录成功与否
		if (list.size() > 0) {
			// 登录成功
			// 更新logtime1 或 logtime2
			modLogtime(list.get(0));
			return list.get(0);
		} else {
			return null;
		}

	}

	/**
	 * 更新登录时间
	 * 
	 * @param 当前用户对象
	 * @return 影响的行数
	 */
	public void modLogtime(Userinfo user) {

		int userid = user.getUserid();
		// 获取当前时间
		Date curtime = new Date();

		// 取logtime1
		Date logtimeone = user.getLogtimeone();
		// 取logtime2
		Date logtimetwo = user.getLogtimetwo();

		if (logtimeone.before(logtimetwo)) {
			// 如果logtimeone<logtimetwo
			um.updateByPrimaryKeySelective(new Userinfo(userid, null, null, null, null, null, null, null, null, null,
					curtime, null, null, null));
		} else {
			um.updateByPrimaryKeySelective(new Userinfo(userid, null, null, null, null, null, null, null, null, null,
					null, null, curtime, null));
		}
	}

	/**
	 * 修改密码
	 * 
	 * @param userid,newpassword
	 * @return
	 */
	public boolean modPassword(Userinfo user) {

		um.updateByPrimaryKeySelective(new Userinfo(user.getUserid(), null, user.getPassword(), null, null, null, null,
				null, null, null, null, null, null, null));
		return true;
	}

	/**
	 * 检查密保答案是否一致
	 * 
	 * @param: userid,webseca封装在对象中
	 * 
	 * @return
	 */
	public boolean checkSeca(Userinfo user) {
		Userinfo cond = um.selectByPrimaryKey(user.getUserid());
		return cond.getSeca().equals(user.getSeca());
	}

	/**
	 * 检查输入密码是否正确,
	 * 
	 * @param: userid,输入password封装在对象中
	 * 
	 * @return
	 */
	public boolean checkOldPassword(Userinfo user) {
		Userinfo cond = um.selectByPrimaryKey(user.getUserid());
		return cond.getPassword().equals(user.getPassword());
	}

	/**
	 * 获取该用户上次登录时间 ,logtime1,logtime2取最小的
	 * 
	 * @param: 用户对象/userid
	 * 
	 * @return
	 */
	public Date getLastlogtime(Userinfo user) {
		Userinfo cond = um.selectByPrimaryKey(user.getUserid());
		// 取logtime1
		Date logtime1 = cond.getLogtimeone();
		// 取logtime2
		Date logtime2 = cond.getLogtimetwo();
		// 比较大小，返回最小值
		if (logtime1.before(logtime2)) {
			return logtime1;
		} else {
			return logtime2;
		}
	}

	/**
	 * 通过username获取密保问题
	 * 
	 * @param user
	 * @return 用户对象
	 */
	public Userinfo getSecqByUsername(Userinfo user) {
		UserinfoExample example = new UserinfoExample();
		UserinfoExample.Criteria cc = example.createCriteria();
		cc.andUsernameEqualTo(user.getUsername());
		List<Userinfo> list = um.selectByExample(example);

		if (!list.isEmpty()) {
			return list.get(0);
		} else {
			return null;
		}

	}
}
